/* @Author: Benny Vermonden
 * @Description: Data Access object voor adres toe te voegen 
*/
package core.logic.dataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

import core.logic.services.utilServices.ConnectionService;
import core.models.dataModels.createModels.ToevoegenPersoneelModel;
import core.models.domainModel.Adres;

public class AdresDAO {

	public static int AddAdres(Adres adres){
		//INSERT INTO Adres (Straat ,Huisnumer,bus ,Gemeente ,PostCode ,Staat_Provincie ,Land)
	    // VALUES(varchar(150) ,int , varchar(10), varchar(150), varchar(20), varchar(150), varchar(150));

		String sql = "INSERT INTO Adres(Straat ,Huisnumer,bus ,Gemeente ,PostCode ,Staat_Provincie ,Land) VALUES (?, ?, ?, ?, ?, ?, ?)";
		
		int ok = 0;
	
			Connection con;
			try {
				con = ConnectionService.getConnection();
				PreparedStatement pst = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
				pst.setString(1, adres.getStraat());
				pst.setInt(2, adres.getHuisnummer());
				//pst.setString(3, "");
				pst.setString(3, adres.getBus()); // Wijnen David [c1026300]: Bus werd niet toegevoegd
				pst.setString(4, adres.getGemeente());
				pst.setString(5, adres.getPostcode());
				//pst.setString(6, "");
				pst.setString(6, adres.getStaatProvincie());// Wijnen David [c1026300]: Staat/Provincie werd niet toegevoegd
				pst.setString(7, adres.getLand());
				ok = pst.executeUpdate();
				
				ResultSet rs = pst.getGeneratedKeys(); //ophalen van de gegenereerde id
				rs.next();
				adres.set_adresId(rs.getInt(1));
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return ok;
	}
	
	//Ophalen van adresgegevens voor validatie van bestaand adres
	//Lieven Drijkoningen
	public static int getAdresId(ToevoegenPersoneelModel model)
	{	
		int adresId = 0;
		String sql = "SELECT AdresId "
				+ "FROM Adres a "
				+ "WHERE a.Straat = ? " //1
				+ "AND a.Huisnumer = ? "//2 
				+ "AND a.bus = ? "//3
				+ "AND a.Gemeente = ? "//4
				+ "AND a.PostCode = ? "//5
				+ "AND a.Staat_Provincie = ? "//6
				+ "AND a.Land = ?";//7
		try
		{
			PreparedStatement pst = ConnectionService.getConnection().prepareStatement(sql);
			pst.setString(1, model.get_straat());
			pst.setInt(2, model.get_huisnummer());
			pst.setString(3, model.get_bus());
			pst.setString(4, model.get_gemeente());
			pst.setString(5, model.get_postcode());
			pst.setString(6, model.get_stadProvincie());
			pst.setString(7, model.get_land());
			ResultSet rs = pst.executeQuery();
			while(rs.next())
			{
				adresId = (rs.getInt("AdresId"));
			}			
		}
		catch (SQLException ex)
		{
			JOptionPane.showMessageDialog(null, ex.getMessage());
		}
		return adresId;
	}
	
	public static Adres getAdresByAdresId(int adresId) {
		Adres adres = null;
		String sql = "SELECT Straat, Huisnumer, bus, Gemeente, PostCode, Staat_Provincie, Land "
				+    "FROM Adres "
				+    "WHERE AdresId = ?";
		
		try {
			PreparedStatement statement = ConnectionService.getConnection().prepareStatement(sql);
			statement.setInt(1, adresId);
			
			ResultSet resultSet = statement.executeQuery();
			
			if(resultSet.next()) {
				adres = new Adres(
						resultSet.getString("Straat"),
						resultSet.getInt("Huisnumer"),
						resultSet.getString("bus"),
						resultSet.getString("Gemeente"),
						resultSet.getString("PostCode"),
						resultSet.getString("Staat_Provincie"),
						resultSet.getString("Land"));
				adres.set_adresId(adresId);
			}
		} catch(SQLException ex) {
			ex.printStackTrace();
		}
		
		return adres;
	}
	
	//Wijnen David [c1026300] 2013-12-14
	public static boolean updateAdres(Adres adres)
	{
		//maak gebruik van de andere update-routine
		return updateAdres(adres.get_adresId(), adres.getStraat(), adres.getHuisnummer(), adres.getBus(),
				adres.getGemeente(),adres.getPostcode(), adres.getStaatProvincie(), adres.getLand());
	}
	
	
	public static boolean updateAdres(int adresId, String straat, int huisnummer, String bus, String gemeente, String postCode, String staatProvincie, String land) {
		String sql = "UPDATE Adres "
				+    "SET Straat = ?, "
				+        "Huisnumer = ?, "
				+        "bus = ?, "
				+        "Gemeente = ?, "
				+        "PostCode = ?, "
				+        "Staat_Provincie = ?, "
				+        "Land = ? "
				+    "WHERE AdresId = ?";
		int result = 0;
		
		try {
			PreparedStatement statement = ConnectionService.getConnection().prepareStatement(sql);
			statement.setString(1, straat);
			statement.setInt(2, huisnummer);
			statement.setString(3, bus);
			statement.setString(4, gemeente);
			statement.setString(5, postCode);
			statement.setString(6, staatProvincie);
			statement.setString(7, land);
			statement.setInt(8, adresId);
			
			result = statement.executeUpdate();
		} catch(SQLException ex) {
			ex.printStackTrace();
		}
		
		return (result == 1);
	}
}
